/**
 * User: Justin Akin
 * Twitter: @idointernet
 * Date: 7/15/12
 */
jpackage( "twc.utils", function() {

	this.UTF8Util = {

		encode: function( string ) {

			var i, c, utftext = '';

			string = string.replace(/\r\n/g,"\n");

			for( i = 0; i < string.length; i++) {

				c = string.charCodeAt( i );

				if( c < 128 ) {
					utftext += String.fromCharCode( c );
				}
				else if( ( c > 127 ) && ( c < 2048 ) ) {
					utftext += String.fromCharCode( ( c >> 6 ) | 192 );
					utftext += String.fromCharCode( ( c & 63) | 128 );
				}
				else {
					utftext += String.fromCharCode( ( c >> 12 ) | 224 );
					utftext += String.fromCharCode( ( ( c >> 6 ) & 63 ) | 128 );
					utftext += String.fromCharCode( ( c & 63 ) | 128 );
				}

			}

			return utftext;

		},

		decode: function( utftext ) {

			var string = '';
			var i = c = c1 = c2 = 0;

			while ( i < utftext.length ) {

				c = utftext.charCodeAt( i );

				if( c < 128 ) {
					string += String.fromCharCode( c );
					i++;
				}
				else if( ( c > 191 ) && ( c < 224 ) ) {

					c2 = utftext.charCodeAt( i + 1 );
					string += String.fromCharCode( ( ( c & 31 ) << 6 ) | ( c2 & 63 ) );
					i += 2;

				}
				else {

					c2 = utftext.charCodeAt( i + 1 );
					c3 = utftext.charCodeAt( i + 2 );
					string += String.fromCharCode( ( ( c & 15 ) << 12 ) | ( ( c2 & 63 ) << 6 ) | ( c3 & 63 ) );
					i += 3;

				}

			}

			return string;

		}

	}

});